type Zip<T, U> = T extends [infer P1, ...infer R1]
    ? U extends [infer P2, ...infer R2]
        ? [[P1, P2], ...Zip<R1, R2>]
        : []
    : []